<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class News extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->model(array('news/news_model'=>'news_model','news/news_jobs_model'=>'news_jobs_model'));
    }
// 脚本路径：http://localhost:8080/api/index.php/jobs/news_jobs/jinse   第55分钟执行
    /**
     * 初始化当前最大值，金色财经保存最大id，巴比特存放页数，初始化所有数据以后，巴比特可以不处理。
     */
    public function index(){
        $url = "https://api.jinse.com/noah/v2/lives?limit=20";
        $content = geturl($url);
        if(!empty($content)) {
            $infos = json_decode($content, true);
            if (is_array($infos)) {
                $last = $infos['top_id'];
                $update = array(
                    'last' => $last,
                );
                $this->news_jobs_model->update(1, $update);
            }
        }
    }
    // 脚本路径：http://localhost:8080/api/index.php/jobs/news_jobs/jinse   整点执行
    /**
     * 金色财经资讯爬虫
     *
     */
    public function jinse()
    {
        $cate_id = 2;
        $job = $this->news_jobs_model->get_by_field('type',"jinse");
        $url = "https://api.jinse.com/noah/v2/lives?limit=".$job['page_limit']."&flag=down&id=".$job['last'];
        $content = geturl($url);
        if(!empty($content)){
            $infos = json_decode($content,true);
            if(is_array($infos)){
                $last = $infos['bottom_id'];
                $news = array();
                //var_dump($infos['list']);exit;
                for($i = 0; $i < count($infos['list']); $i++){
                    $news = array_merge($news,$infos['list'][$i]['lives']); // 因为接口分日期，所以直接把数据拿出来合成新数组
                }
                if(!empty($news)){
                    // 循环数据入库
                    $sql = "";
                    foreach($news as $vo){
                        $sql .= "(";
                        // 处理标签
                        $tag = "";
                        if(!empty($vo['word_blocks'])){
                            $tag = implode(",",array_column(array_column($vo['word_blocks'],"data"),"symbol"));
                        }
                        $sql .= '"'.htmlspecialchars($vo['content_prefix']).'",'.$cate_id.',"'.htmlspecialchars($vo['content']).'","'.$tag.'","'.date("Y-m-d H:i:s",$vo['created_at']).'","'.date("Y-m-d H:i:s").'","jinse","'.$vo['id'].'","1"';
                        $sql .= '),';
                    }
                    $sql = substr($sql,0,-1);
                    //echo $sql;exit;
                    // 事务操作
                    // 事务开始
                    $this->db->trans_strict(FALSE); // 关闭严格模式，以免死锁
                    $this->db->trans_begin();
                    $this->news_model->insert_bat($sql);
                    $update = array(
                        'last' => $last,
                    );
                    $this->news_jobs_model->update(1, $update);

                    if ($this->db->trans_status() === FALSE)
                    {
                        $this->db->trans_rollback();
                        log_message('error', '金色爬虫脚本失败-'.$last);
                    }
                    else
                    {
                        $this->db->trans_commit();
                        response_json();
                    }
                }else{
                    log_message('error', '金色爬虫无数据-'.$job['last']);
                }

            }
        }else{
            log_message('error', '金色爬虫无数据-'.$job['last']);
        }
    }
    // 脚本路径：http://localhost:8080/api/index.php/jobs/news_jobs/btc   整点执行
    /**
     * 巴比特资讯爬虫
     */
    public function btc()
    {
        $cate_id = 6;
        $job = $this->news_jobs_model->get_by_field('type',"btc");
        $url = "https://webapi.8btc.com/bbt_api/news/list?num=".$job['page_limit'];
        $content = geturl($url);
        if(!empty($content)){
            $infos = json_decode($content,true);
            if(is_array($infos)){
                $last = $job['last'] + 1;
                $news = $infos['data']['list'];
                if(!empty($news)){
                    // 循环数据入库
                    $sql = "";
                    foreach($news as $vo){
                        $sql .= "(";
                        // 处理标签
                        $tag = "";
                        if(!empty($vo['tags'])){
                            $tag = implode(",",array_column($vo['tags'],"name"));
                        }
                        $sql .= '"'.htmlspecialchars($vo['title']).'",'.$cate_id.',"","'.$tag.'","'.$vo['post_date_format'].'","'.date("Y-m-d H:i:s").'","btc","'.$vo['id'].'","0"';
                        $sql .= '),';
                    }
                    $sql = substr($sql,0,-1);
                    // 事务操作
                    // 事务开始
                    $this->db->trans_strict(FALSE); // 关闭严格模式，以免死锁
                    $this->db->trans_begin();
                    $this->news_model->insert_bat($sql);
                    $update = array(
                        'last' => $last,
                    );
                    //$this->news_jobs_model->update(2, $update);

                    if ($this->db->trans_status() === FALSE)
                    {
                        $this->db->trans_rollback();
                        log_message('error', '巴比特爬虫脚本失败-'.$last);
                    }
                    else
                    {
                        $this->db->trans_commit();
                        response_json();
                    }
                }

            }else{
                log_message('error', '巴比特爬虫无数据-'.$job['last']);
            }
        }else{
            log_message('error', '巴比特爬虫无数据-'.$job['last']);
        }
    }

    // 脚本路径：http://localhost:8080/api/index.php/jobs/news_jobs/btc_content   每10分钟一次
    public function btc_content(){
        // 查询巴比特下所有状态为0的新闻，每次50条进行处理。
        $where      = "where url='btc' and status=0";
        $order_by   = "order by `id` desc";
        $limit = 10;
        $result     = $this->news_model->result_data($where, $order_by, 0, $limit);
        if(!empty($result)){
            foreach($result as $vo){
                $id = $vo['pa_id'];
                $url = "https://www.8btc.com/article/".$id;
                $content = geturl($url);
                if(!$content || strpos($content,"您访问的页面不")){
                    $url = "https://www.8btc.com/media/".$id;
                    $content = geturl($url);
                }
                if($content && strpos($content,"您访问的页面不") === false){
// 正则处理内
                    $start ="<div data-editby=\"ne\" class=\"ne-render-content\">";
                    $end = "</div>";
                    $res_json = $this->btcmatchingn($content,$start,$end);
                    if($res_json){
//                        $res_json = substr($res_json,25,-10);
//                        $res = json_decode($res_json,true);
//                        if(is_array($res)){
//                            $info = $res['article']['items'][$id]['content'];
//                            if($info){
                                // 修改数据库内容以及状态
                                $update = array(
                                    'content' => $res_json,
                                    'status' => 1,
                                    'updated_at' => date('Y-m-d H:i:s'),
                                );
                                $this->news_model->update($vo['id'], $update);
//                            }
//                        }else{
//                            log_message('error', '巴比特内容爬虫数据错误-'.$id);
//                        }
                    }
                }else{
                    log_message('error', '巴比特内容爬虫数据错误-'.$id);
                }
            }
        }else{
            log_message('error', '巴比特内容爬虫无数据');
        }


    }
    function btcmatching($str, $a, $b)
    {
        $pattern = '/('.$a.').*?('.$b.')/is'; //正则规则匹配支付串中任何一个位置字符串
        preg_match_all($pattern, $str, $m);   //返回一个匹配结果
        if(!empty($m)){
            return $m[0][0];  //到时候在这里书写返回值就好了 .
        }
        return false;

    }
    function btcmatchingn($str,$a,$b){
        $str = explode($a,$str);
        $pos = strpos($str[1],$b);
        $str = substr($str[1],0,$pos);
        return $str;
    }

// 移除前一天目录的计划任务，每天凌晨1点钟执行
    public function remove_report(){
        $path = "/www/wwwroot/client.mytbanic.com/api/uploads/report/".date("Ymd",strtotime("-1 day"))."/";
        if(is_dir($path)){
            //扫描一个文件夹内的所有文件夹和文件并返回数组
            $p = scandir($path);
            foreach($p as $val){
                //排除目录中的.和..
                if($val !="." && $val !=".."){
                    //echo $path.$val;exit;
                    unlink($path.$val);
                }
            }
            rmdir($path);
        }
    }

}